جزوه · فصل دهم · جلسه ۹۸ · استفاده از SSH ← بازگشت به فهرست
📘 فصل دهم · جلسه ۹۸ استفاده از SSH
📅 تاریخ: شنبه، ۷ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث حیاتی در امنیت شبکه و ارتباطات است. SSH، کلیدهای عمومی/خصوصی و محدودیت‌های امنیتی در آزمون‌های LPIC و RHCSA بسیار پرتکرارند.
🔑 قبل از شروع، یه مثال ساده:

فرض کن می‌خوای یه نامهٔ محرمانه رو از راه دور برای کسی بفرستی. اگر نامه رو بدون پاکت بفرستی، هر کسی می‌تونه بخونش. اما اگر توی یه پاکت قفل‌شده بذاری و فقط اون شخص کلید داشته باشه، ارتباطت امن میشه. توی لینوکس، SSH دقیقاً همینه: یه راه امن برای ارتباط با سرور از راه دور که تمام اطلاعات رو رمزنگاری میکنه و حتی با کلید می‌تونی بدون رمز عبور وارد بشی. این جلسه بهت یاد میده چطور از SSH استفاده کنی و امنیت‌ش رو بالا ببری!

▍ چرا SSH؟

SSH (مخفف Secure Shell) یک پروتکل امن برای ارتباط با سیستم‌های راه دور است. مزایای اصلی آن:

🔑 نکته کلیدی: SSH جایگزین پروتکل‌های ناامنی مثل Telnet و FTP شده است. تمام داده‌ها در SSH رمزنگاری می‌شوند.

▍ انواع کلیدها در SSH

در SSH دو نوع ساختار کلید وجود دارد:

🔵 Private Key (کلید خصوصی)

  • یک کلید برای هم رمزنگاری و هم رمزگشایی استفاده می‌شود.
  • به آن Symmetric Key نیز می‌گویند.
  • معایب: اگر کلید لو برود، همه چیز لو رفته است.
  • کاربرد: کمتر در SSH استفاده می‌شود.

🟢 Public/Private Key Pairs (جفت‌کلید عمومی/خصوصی)

  • دو کلید جداگانه: یکی برای رمزنگاری (Public) و یکی برای رمزگشایی (Private).
  • به آن Asymmetric Key نیز می‌گویند.
  • مزایا: کلید عمومی را می‌توان به هر کسی داد، اما فقط کلید خصوصی می‌تواند رمزگشایی کند.
  • کاربرد: رایج‌ترین روش در SSH برای احراز هویت.
نکته: در SSH از Public/Private Key Pairs (جفت‌کلید نامتقارن) استفاده می‌شود که امنیت بسیار بالایی دارد.

▍ ساخت کلید SSH با ssh-keygen

ssh-keygen ابزاری برای تولید جفت‌کلیدهای عمومی/خصوصی است.

┌──(ya3in㉿kali)-[~] └─$ ssh-keygen -t rsa -b 4096 -C "my_key@server" Generating public/private rsa key pair. Enter file in which to save the key (/home/ya3in/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ya3in/.ssh/id_rsa Your public key has been saved in /home/ya3in/.ssh/id_rsa.pub The key fingerprint is: SHA256:xyz... my_key@server The key's randomart image is: +---[RSA 4096]----+ | .o+*=... | | .+o+o. | | .+o+ | | . . | | ... | +----[SHA256]-----+

توضیح:

نکته: همیشه از Passphrase برای کلید خصوصی استفاده کنید تا اگر کلید به دست شخص دیگری افتاد، قابل استفاده نباشد.

▍ انتقال کلید عمومی به سرور

بعد از ساخت کلید، باید کلید عمومی را به سرور مقصد منتقل کنید تا سرور شما را بشناسد.

• روش اول: ssh-copy-id (ساده‌ترین)

┌──(ya3in㉿kali)-[~] └─$ ssh-copy-id user@192.168.1.100 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ya3in/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys user@192.168.1.100's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'user@192.168.1.100'" and check to make sure that only the key(s) you wanted were added.

توضیح: ssh-copy-id کلید عمومی را به ~/.ssh/authorized_keys در سرور مقصد اضافه می‌کند.

• روش دوم: دستی

┌──(ya3in㉿kali)-[~] └─$ cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

توضیح: کلید عمومی را خوانده و از طریق SSH به سرور ارسال می‌کند و در فایل authorized_keys ذخیره می‌کند.

▍ اتصال با کلید به سرور

بعد از انتقال کلید، می‌توانید بدون رمز عبور به سرور متصل شوید:

┌──(ya3in㉿kali)-[~] └─$ ssh user@192.168.1.100 Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-91-generic x86_64) Last login: Sat Sep 7 10:30:00 2026 from 192.168.1.50 user@server:~$

توضیح: حالا بدون نیاز به رمز عبور وارد سرور می‌شوید (اگر Passphrase تعیین کرده‌اید، فقط یک بار آن را وارد می‌کنید).

▍ محدودیت‌های امنیتی مهم در SSH

برای افزایش امنیت سرور SSH، باید محدودیت‌های زیر را اعمال کنید:

• محدودیت‌های پیشنهادی

محدودیت توضیح تنظیم در /etc/ssh/sshd_config
ورود کاربر root ورود مستقیم root را ممنوع کنید. PermitRootLogin no
X11 Forwarding اگر نیاز ندارید، غیرفعال کنید. X11Forwarding no
ورود با رمز عبور فقط با کلید اجازهٔ ورود بدهید. PasswordAuthentication no
تغییر پورت پیش‌فرض پورت ۲۲ را به پورت دیگری تغییر دهید. Port 2222
چالش-پاسخ غیرفعال کردن احراز هویت چالشی. ChallengeResponseAuthentication no
استفاده از PAM غیرفعال کردن احراز هویت PAM. UsePAM no
⚠️ توجه: قبل از غیرفعال کردن PasswordAuthentication، حتماً مطمئن شوید که کلید شما به درستی تنظیم شده است، در غیر این صورت خودتان را از سرور قفل خواهید کرد!

• تنظیمات کامل امنیتی SSH

# /etc/ssh/sshd_config # تغییر پورت Port 2222 # غیرفعال کردن ورود root PermitRootLogin no # فقط ورود با کلید PasswordAuthentication no # غیرفعال کردن چالش-پاسخ ChallengeResponseAuthentication no # غیرفعال کردن X11 Forwarding X11Forwarding no # غیرفعال کردن PAM UsePAM no # حداکثر تلاش برای ورود MaxAuthTries 3 # زمان اتصال (ثانیه) LoginGraceTime 30
نکته: بعد از تغییرات در /etc/ssh/sshd_config، سرویس SSH را ری‌استارت کنید: sudo systemctl restart sshd

▍ ابزارهای مفید SSH

دستور کاربرد مثال
ssh اتصال به سرور از راه دور ssh user@192.168.1.100
scp انتقال فایل از طریق SSH scp file.txt user@192.168.1.100:/tmp/
sftp انتقال فایل تعاملی (مشابه FTP امن) sftp user@192.168.1.100
ssh-keygen تولید جفت‌کلید ssh-keygen -t rsa -b 4096
ssh-copy-id کپی کلید عمومی به سرور ssh-copy-id user@192.168.1.100

▍ انتقال فایل با scp

┌──(ya3in㉿kali)-[~] └─$ scp -P 2222 document.pdf user@192.168.1.100:/home/user/ document.pdf 100% 2.3MB 2.3MB/s 00:01

توضیح: فایل document.pdf را از طریق پورت ۲۲۲۲ به سرور منتقل می‌کند.

نکته: scp از همان احراز هویت SSH استفاده می‌کند، پس اگر کلید تنظیم شده باشد، نیازی به رمز عبور نیست.

▍ خلاصه و جمع‌بندی

✅ جمع‌بندی نهایی:
  • SSH → ارتباط امن با سرور از راه دور.
  • Public/Private Key Pairs → امن‌ترین روش احراز هویت.
  • ssh-keygen → تولید جفت‌کلید.
  • ssh-copy-id → انتقال کلید عمومی به سرور.
  • محدودیت‌ها: غیرفعال کردن ورود root، تغییر پورت، غیرفعال کردن رمز عبور.
  • scp و sftp → انتقال فایل امن.
  • همیشه پس از تنظیمات، سرویس SSH را ری‌استارت کنید.
📝 تمرین پیشنهادی:

یک سناریو کامل پیاده‌سازی کنید:

  • یک جفت‌کلید RSA با ssh-keygen بسازید.
  • کلید عمومی را با ssh-copy-id به یک سرور آزمایشی منتقل کنید.
  • با ssh بدون رمز به سرور متصل شوید.
  • یک فایل با scp به سرور منتقل کنید.
  • در /etc/ssh/sshd_config تنظیمات امنیتی (غیرفعال کردن رمز، تغییر پورت) را اعمال کنید.